package com.chengzhi;

import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @description:
 * @author: ruanchengzhi
 * @create: 2020-06-19 11:04
 **/
@SpringBootApplication
public class SentinalApplication {
    public static void main(String[] args) {
        SpringApplication.run(SentinalApplication.class, args);
    }

    /**
     * @SentinelResource 限流控制和熔断降级
     *      value 资源名称
     *      blockHandler 限流的异常处理方法
     *      fallback 熔断的降级处理方法
     *      exceptionsToIgnore 哪些异常被排除掉，不会计入异常统计中，也不会进入 fallback 逻辑中，而是会原样抛出
     *      defaultFallback 默认的 fallback 函数名称，可选项，通常用于通用的 fallback 逻辑（即可以用于很多服务或方法
     * @return: com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect
     * @author: ruanchengzhi
     * @date: 2020/9/2
     */
    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        return new SentinelResourceAspect();
    }

    @RestController
    static class TestController {

        @GetMapping("/hello")
        public String hello() {
            return "hello";
        }

    }
}
